home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / 8adp / test.c < prev   
Text File  |  1997-10-13  |  3KB  |  134 lines

  1. #include    <stdio.h>
  2. #include    <stdlib.h>
  3. #include    "8adpcm.h"
  4.  
  5. #define        UNchar        unsigned char
  6. #define        UNshort        unsigned short
  7. #define        UNint        unsigned int
  8. #define        UNlong        unsigned long
  9.  
  10. #define    BLOCK (1024*8)
  11.  
  12.  
  13. /*-----------------------------------------------*/
  14. void    main(ar,av)
  15. int    ar;
  16. UNchar    **av;
  17. {
  18. int    i,j,m,n,f,l,sl,fl;
  19. UNint    ll;
  20. UNchar    *Mo;
  21. UNchar    *Mi;
  22. int    fi,fo;
  23. UNchar    ext[256],buf[256],dummy[256];
  24. UNchar    infn[256],outfn[256];
  25. int    de;
  26. PCM2AP8_INIT();
  27. AP82PCM_INIT();
  28. printf(    "X68k 8bit-ADPCM DE/ENCODER 評価版 ver 0.01\n"
  29.     "    Copyright 1997 TNB製作所   8bit-ADPCM Originated by NTSC\n"
  30. );
  31. if ( ar==1 ){
  32.     printf(    "\n"
  33.         "[使い方] 8ADP.x [filename1] [filename2]\n"
  34.         "\n"
  35.         "    filename1 の拡張子で判断し変換します。\n"
  36.         "    *.S?? なら *.Y?? へ変換します。\n"
  37.         "    *.Y?? なら *.S?? へ変換します。\n"
  38.         "\n"
  39.         "     filename2 の指定がない場合、filename1 の拡張子を変えて出力\n"
  40.         "    ファイル名とします。\n"
  41.         "\n"
  42.     );
  43.     return;
  44. }
  45. ll=MALLOC(0xFFFFFFFF);
  46. ll&=0x00FFFFFF;
  47. ll-=256;
  48. ll/=2;
  49. if ( ll>BLOCK )
  50.     ll=BLOCK;
  51. Mi=MALLOC(ll);
  52. if ( Mi>=0x81000000 ){
  53.     printf(" メモリが確保出来ませんでした。\n");
  54.     return;
  55. }
  56. Mo=MALLOC(ll);
  57. if ( Mo>=0x81000000 ){
  58.     printf(" メモリが確保出来ませんでした。\n");
  59.     return;
  60. }
  61. strsfn(av[1],dummy,dummy,dummy,ext);
  62. if ( (ext[0]|0x20)=='y' ){
  63.     //== Yxx -> Sxx だ
  64.     de=0;
  65. } else if ( (ext[0]|0x20)=='s' ){
  66.     //== Sxx -> Yxx だ
  67.     de=-1;
  68. } else {
  69.     printf("拡張子が未知です。現在は *.Sxx か *.Yxx のみです。 \n");
  70.     return;
  71. }
  72. i=atoi(&ext[1]);
  73. if ( i<=0 || i>99 ){
  74.     printf("拡張子が未知です。\n");
  75.     return;
  76. }
  77. if ( ar>=3 )
  78.     strcpy(buf,av[2]);
  79. else    strcpy(buf,av[1]);
  80. if ( de==0 )
  81.     ext[0]='S';
  82. else    ext[0]='Y';
  83. strmfe(outfn,buf,ext);
  84. fi=OPEN(av[1],0);
  85. if ( fi<0 ){
  86.     printf(" [%s]がオープン出来ませんでした。\n",av[1]);
  87.     return;
  88. }
  89. fo=CREATE(outfn,0x20);
  90. if ( fo<0 ){
  91.     printf(" [%s]が新規オープン出来ませんでした。\n",outfn);
  92.     return;
  93. }
  94. fl=SEEK(fi,0,2);
  95. SEEK(fi,0,0);
  96. sl=0;
  97. if ( de==0 )
  98.     printf("\n8bit-ADPCMファイル[%s]を DECODE します。\n\n",av[1]);
  99. else    printf("\nPCMファイル[%s]を ENCODE します。\n\n",av[1]);
  100. printf("\x1B""0");
  101. for(;;){
  102.     if ( de==0 )
  103.         l=READ(fi,Mi,ll/2);
  104.     else    l=READ(fi,Mi,ll);
  105.     printf(" 変換中 (%6d)[%6d]\r",sl,fl);
  106.     if ( l==0 )
  107.         break;
  108.     if ( l<0 ){
  109.         printf(" 読み込みエラーです。\n");
  110.         return;
  111.     }
  112.     sl+=l;
  113.     if ( de==0 ){
  114.         //======== Yxx -> Sxx
  115.         AP82PCM( Mi,Mo,l );
  116.         i=WRITE(fo,Mo,l*2);
  117.         if ( l<0 ){
  118.             printf(" 書き込みエラーです。\n\x1B""1");
  119.             return;
  120.         }
  121.     } else {
  122.         //======== Sxx -> Yxx
  123.         PCM2AP8( Mi,Mo,l );
  124.         i=WRITE(fo,Mo,l/2);
  125.         if ( l<0 ){
  126.             printf(" 書き込みエラーです。\n\x1B""1");
  127.             return;
  128.         }
  129.     }
  130. }
  131. printf("\n\x1B""1変換終了しました。\n\n");
  132. return;
  133. }
  134.